# coding:utf-8
# !/usr/bin/env python

import os
COV = None
if os.environ.get('FLASK_COVERAGE'):
    import coverage
    COV = coverage.coverage(branch=True, include='app/*')
    COV.start()

import env_config    # 请勿删除
from app import create_app, db
from flask_script import Manager, Shell
from flask_migrate import Migrate, MigrateCommand

app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)
migrate = Migrate(app, db)

manager.add_command('db', MigrateCommand)


def make_shell_context():
    return dict(app=app, db=db)
manager.add_command("shell", Shell(make_context=make_shell_context))


#@manager.command
#def test(coverage=False):
#    """Run the unit tests."""
#    if coverage and not os.environ.get('FLASK_COVERAGE'):
#        import sys
#        os.environ['FLASK_COVERAGE'] = '1'
#        os.execvp(sys.executable, [sys.executable] + sys.argv)
#    import unittest
#    tests = unittest.TestLoader().discover('tests')
#    unittest.TextTestRunner(verbosity=2).run(tests)
#    if COV:
#        COV.stop()
#        COV.save()
#        print('Coverage Summary:')
#        COV.report()
#        basedir = os.path.abspath(os.path.dirname(__file__))
#        covdir = os.path.join(basedir, 'tmp/coverage')
#        COV.html_report(directory=covdir)
#        print('HTML version: file://%s/index.html' % covdir)
#        COV.erase()


#@manager.command
#def profile(length=25, profile_dir=None):
#    """Start the application under the code profiler."""
#    from werkzeug.contrib.profiler import ProfilerMiddleware
#    app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[length],
#                                      profile_dir=profile_dir)
#    app.run()


#@manager.command
#def deploy():
#    """Run deployment tasks."""
#    from flask_migrate import upgrade
#    from app.models import Role, User
#
#    # migrate database to latest revision
#    upgrade()

@manager.command
def init_admin():
    """
    初始化管理员
    """
    from app.auth.models import AdminUser
    admin_list = [
        ('zhouheling', '111111'),
        ('chenhj', '123456'),
        ('huhao', '111111'),
    ]
    for admin_user in admin_list:
        db.session.add(
            AdminUser(username=admin_user[0], pwd=admin_user[1])
        )
    db.session.commit()


if __name__ == '__main__':
    manager.run()
